package com.sy.controller;

import com.sy.dto.JsonResult;
import com.sy.utils.UuidUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import static com.sy.constant.BusinessConstant.IMG_ADDRESS;

@RestController
public class UploadController {

    @Value("${uploadDir}")
    private String uploadDir;

    @RequestMapping(value = "uploadsingle")
    public JsonResult formOne(MultipartFile file) throws IOException {
        //文件的原始名称
        String submittedFileName = file.getOriginalFilename();
        //在上传文件的时候，不要使用文件的默认的名字来作为最终保存的名字，因为
        //后续的文件在上传过程中有可能会和之前的文件重名，发生覆盖，因此文件一般都需要重命名
        String newFileName = UuidUtils.generateUUid();
        //获取原来文件的后缀名
        String extName = FilenameUtils.getExtension(submittedFileName);
        //最终的新的文件的完整名字=新的文件名+.+原来的后缀
        newFileName = newFileName + "." + extName;

        //判断用于保存文件的目录是否存在，如果不存在则创建之
        File saveDir = new File(uploadDir);
        if (!saveDir.exists()) {
            saveDir.mkdirs();
        }

        try (InputStream is = file.getInputStream()) {
            OutputStream os = new FileOutputStream(uploadDir + newFileName);
            //将输入流复制到输出流即完成了文件的拷贝操作
            FileCopyUtils.copy(is, os);
        }
        JsonResult result = new JsonResult();
        result.setSuccess(true);
        //文件上传后的访问路径
        result.setData(newFileName);
        return result;
    }

    @RequestMapping("uploadmore")
    public JsonResult formOne(@RequestParam("file") MultipartFile[] files) throws IOException {
        List<String> fileUrlList = new ArrayList<>();
        if (!ArrayUtils.isEmpty(files)) {
            for (MultipartFile file : files) {
                //文件的原始名称
                String submittedFileName = file.getOriginalFilename();
                //在上传文件的时候，不要使用文件的默认的名字来作为最终保存的名字，因为
                //后续的文件在上传过程中有可能会和之前的文件重名，发生覆盖，因此文件一般都需要重命名
                String newFileName = UuidUtils.generateUUid();
                //获取原来文件的后缀名
                String extName = FilenameUtils.getExtension(submittedFileName);
                //最终的新的文件的完整名字=新的文件名+.+原来的后缀
                newFileName = newFileName + "." + extName;

                //判断用于保存文件的目录是否存在，如果不存在则创建之
                File saveDir = new File(uploadDir);
                if (!saveDir.exists()) {
                    saveDir.mkdirs();
                }

                try (InputStream is = file.getInputStream()) {
                    OutputStream os = new FileOutputStream(uploadDir + newFileName);
                    //将输入流复制到输出流即完成了文件的拷贝操作
                    FileCopyUtils.copy(is, os);
                    //每次复制完毕后，就存放当前文件的访问路径到集合中
                    fileUrlList.add(IMG_ADDRESS + newFileName);
                }
            }
        }

        JsonResult result = new JsonResult();
        result.setSuccess(true);
        //文件上传后的访问路径
        result.setData(fileUrlList);
        return result;
    }
}
